package com.passion.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Sets;
import com.passion.common.threadpool.MyCompletableFuture;
import com.passion.common.threadpool.ThreadPoolHelper;
import com.passion.domain.dao.SysUriDao;
import com.passion.domain.entity.SysUri;
import com.passion.service.SysUriService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.Set;

/**
 * 注意service层方法命名规范：
 * 分页查询方法    （使用 page 做前缀）
 * 查询单个对象方法（使用 get 做前缀）
 * 查询多个对象方法（使用 list 做前缀）
 * 统计数量方法    （使用 count 做前缀）
 * 新增方法        （使用 save / insert 做前缀）
 * 删除方法        （使用 remove / delete 做前缀）
 * 修改方法        （使用 update 做前缀）
 * 
 * 【t_sys_uri】表服务接口
 * @author ZhuYin<zyexplorej2ee@sina.com>
 * @since  2024年12月27日
 */
@Slf4j
@Service
public class SysUriServiceImpl extends ServiceImpl<SysUriDao, SysUri> implements SysUriService {

    /** 要忽略的URI */
    public static final Set<String> IGNORE_URI_SET = Sets.newHashSet("/swagger-resources/configuration/security", "/v3/api-docs", "/swagger-resources", "/v2/api-docs", "/swagger-resources/configuration/ui");

    /**
     * 方法说明：保存系统接口信息
     *
     * @param uris 接口
     * @author ZhuYin
     * @since 2024年12月27日
     */
    @Override
    public void saveUris(Set<String> uris) {
        if (CollectionUtils.isNotEmpty(uris)) {
            MyCompletableFuture.runAsync(() -> {
                for (String uri : uris) {
                    if (StringUtils.isNotBlank(uri) && !IGNORE_URI_SET.contains(uri)) {
                        LambdaQueryWrapper<SysUri> wrapper = new LambdaQueryWrapper<>();
                        wrapper.eq(SysUri::getUri, uri);
                        wrapper.last("limit 1");
                        SysUri sysUri = super.getOne(wrapper);
                        if (sysUri == null) {
                            // 新增系统接口信息
                            sysUri = new SysUri();
                            sysUri.setUri(uri);
                            super.save(sysUri);
                        }
                    }
                }
            }, ThreadPoolHelper.asyncLogTaskThreadPool);
        }
    }
}